home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 4.4 KB | 204 lines |
- 10 ' *********************
- 20 ' ** COMPLEX **
- 30 ' *********************
- 40 '
- 50 CLEAR
- 60 SCREEN 0,0,0,0
- 70 CLS
- 80 KEY OFF
- 90 LOCATE 2,21
- 100 PRINT "* * * COMPLEX NUMBER CALCULATOR * * *
- 110 LOCATE 4,1
- 120 PRINT "Functions for one complex number ... SQR(), EXP(), LOG(), 1/()
- 130 PRINT "Functions for two complex numbers ... + - * /
- 140 PRINT
- 150 PRINT "Results are returned in variables A and B, and may be used in
- 160 PRINT "further calculations. Use of (A+iB) or () inputs previous results
- 170 PRINT
- 180 PRINT "Examples of legal input ...
- 190 PRINT TAB(20)"(3+i4)+(2-i2)
- 200 PRINT TAB(20)"(3+i4)*(2)
- 210 PRINT TAB(20)"(a+ib)*(2)
- 220 PRINT TAB(20)"*(2-i3) ...same as (A+iB)*(2-i3)
- 230 PRINT TAB(20)"(2-i3)*() ...same as (2-i3)*(A-iB)
- 240 PRINT TAB(20)"+(j4)
- 250 PRINT
- 260 PRINT "Spaces may be used anywhere.
- 270 PRINT "You may use either 'i' or 'j' for the imaginary part.
- 280 PRINT "All values should be enclosed in parenthesis.
- 290 PRINT "Simply type in your problems and press the enter key.
- 300 PRINT
- 310 PRINT TAB(20)"PRESS THE SPACE BAR TO BEGIN"
- 320 K$ = INKEY$
- 330 IF K$ <> " " THEN 320
- 340 CLS
- 350 GOTO 1450
- 360 '
- 370 LOCATE 24,5
- 380 PRINT "} ";
- 390 LINE INPUT FUN$
- 400 GOSUB 1740
- 410 GOSUB 1820
- 420 PP = INSTR(FUN$,"()")
- 430 IF PP = 0 THEN 460
- 440 FUN$ = LEFT$(FUN$,PP-1) + "(A+IB)" + MID$(FUN$,PP+2)
- 450 GOTO 420
- 460 C$ = FUN$
- 470 LP = INSTR(C$,"(")
- 480 RP = INSTR(C$,")")
- 490 IF LP = 0 OR RP - LP < 2 THEN 2010
- 500 D$ = MID$(C$,LP+1,RP-LP-1)
- 510 GOSUB 1520
- 520 R1 = R : R2 = 0
- 530 I1 = I : I2 = 0
- 540 C$ = LEFT$(C$,LP-1) + MID$(C$,RP+1)
- 550 LP = INSTR(C$,"(")
- 560 RP = INSTR(C$,")")
- 570 IF C$ <> "" THEN 610
- 580 A = R1
- 590 B = I1
- 600 GOTO 920
- 610 IF LP AND (RP - LP > 1) THEN 670
- 620 R2 = R1
- 630 I2 = I1
- 640 R1 = A
- 650 I1 = B
- 660 GOTO 740
- 670 D$ = MID$(C$,LP+1,RP-LP-1)
- 680 C$ = LEFT$(C$,LP-1) + MID$(C$,RP+1)
- 690 GOSUB 1520
- 700 R2 = R
- 710 I2 = I
- 720 '
- 730 ' Addition
- 740 IF INSTR(C$,"+") = 0 THEN 800
- 750 A = R1 + R2
- 760 B = I1 + I2
- 770 GOTO 1370
- 780 '
- 790 ' Subtraction
- 800 IF INSTR(C$,"-") = 0 THEN 860
- 810 A = R1 - R2
- 820 B = I1 - I2
- 830 GOTO 1370
- 840 '
- 850 ' Multiplication
- 860 IF INSTR(C$,"*") = 0 THEN 920
- 870 A = R1 * R2 - I1 * I2
- 880 B = R1 * I2 + I1 * R2
- 890 GOTO 1370
- 900 '
- 910 ' Division
- 920 IF INSTR(C$,"/") = 0 THEN 1010
- 930 IF INSTR(C$,"1/") THEN 1010
- 940 NUM = R1 * R2 + I1 * I2
- 950 DEN = R2 * R2 + I2 * I2
- 960 A = NUM / DEN
- 970 B = (I1 * R2 - R1 * I2) / DEN
- 980 GOTO 1370
- 990 '
- 1000 ' Exponential
- 1010 IF INSTR(C$,"EXP") = 0 THEN 1070
- 1020 A = EXP(R2) * COS(I2)
- 1030 B = EXP(R2) * SIN(I2)
- 1040 GOTO 1370
- 1050 '
- 1060 ' Natural Logarithm
- 1070 IF INSTR(C$,"LOG") = 0 THEN 1210
- 1080 X = R2
- 1090 Y = I2
- 1100 GOSUB 1890
- 1110 IF MAG > 0 THEN 1160
- 1120 LOCATE 24,40
- 1130 PRINT "Illegal value for LOG function"
- 1140 A = 0
- 1150 GOTO 1170
- 1160 A = LOG(MAG)
- 1170 B = ANG
- 1180 GOTO 1370
- 1190 '
- 1200 ' Square Root
- 1210 IF INSTR(C$,"SQR") = 0 THEN 1270
- 1220 A = SQR((R2 + SQR(R2 * R2 + I2 * I2)) / 2)
- 1230 B = I2 / A / 2
- 1240 GOTO 1370
- 1250 '
- 1260 ' Inverse
- 1270 IF INSTR(C$,"1/") = 0 THEN 1330
- 1280 R1 = 1
- 1290 I1 = 0
- 1300 GOTO 940
- 1310 '
- 1320 ' Function not recognized
- 1330 LOCATE 24,40
- 1340 IF LEN(C$) THEN PRINT "Unknown function
- 1350 '
- 1360 ' output of result
- 1370 LOCATE 24,40
- 1380 PRINT "= ";
- 1390 FUN$ = "(" + STR$(A) + "+i" + STR$(B) + ")"
- 1400 GOSUB 1820
- 1410 PTR = INSTR(FUN$,"+i-")
- 1420 IF PTR THEN MID$(FUN$,PTR,3) = " -i"
- 1430 GOSUB 1820
- 1440 PRINT FUN$
- 1450 LOCATE 1,1
- 1460 PRINT TAB(9)"Functions ... + - * / SQR() EXP() LOG() 1/()
- 1470 PRINT TAB(9)"Returned ... (A+iB) 'A' and/or 'B' may be used for input
- 1480 PRINT SPACE$(160)
- 1490 GOTO 370
- 1500 '
- 1510 ' subroutine for separating out R and I from D$
- 1520 FUN$ = D$
- 1530 GOSUB 1820
- 1540 DA = INSTR(FUN$,"A")
- 1550 IF DA = 0 THEN 1580
- 1560 D$ = LEFT$(FUN$,DA-1) + STR$(A) + MID$(FUN$,DA+1)
- 1570 GOTO 1520
- 1580 DB = INSTR(FUN$,"B")
- 1590 IF DB = 0 THEN 1620
- 1600 D$ = LEFT$(FUN$,DB-1) + STR$(B) + MID$(FUN$,DB+1)
- 1610 GOTO 1520
- 1620 JP = INSTR(FUN$,"I")
- 1630 IF JP = 0 THEN JP = INSTR(FUN$,"J")
- 1640 I = 0
- 1650 R = VAL(D$)
- 1660 IF JP = 0 THEN 1710
- 1670 I = VAL(MID$(FUN$,JP+1))
- 1680 IF JP = LEN(FUN$) THEN I = 1
- 1690 IF JP < 2 THEN 1710
- 1700 IF MID$(FUN$,JP-1,1) = "-" THEN I = -I
- 1710 RETURN
- 1720 '
- 1730 ' subroutine for capitalization
- 1740 FOR CHAR = 1 TO LEN(FUN$)
- 1750 IF MID$(FUN$,CHAR,1) < "a" THEN 1780
- 1760 IF MID$(FUN$,CHAR,1) > "z" THEN 1780
- 1770 MID$(FUN$,CHAR,1) = CHR$(ASC(MID$(FUN$,CHAR,1))-32)
- 1780 NEXT CHAR
- 1790 RETURN
- 1800 '
- 1810 ' subroutine to remove spaces
- 1820 SP = INSTR(FUN$," ")
- 1830 IF SP = 0 THEN 1860
- 1840 FUN$ = LEFT$(FUN$,SP-1) + MID$(FUN$,SP+1)
- 1850 GOTO 1820
- 1860 RETURN
- 1870 '
- 1880 ' subroutine ... rectangular to polar ... X,Y to MAG,ANG
- 1890 MAG = SQR(X*X + Y*Y)
- 1900 NINETY = 2 * ATN(1)
- 1910 IF X THEN ANG = ATN(Y/X) ELSE ANG = NINETY * ((Y<0) - (Y>0))
- 1920 IF X < 0 THEN ANG = ANG + 2 * NINETY * ((ANG>0) - (ANG<=0))
- 1930 RETURN
- 1940 '
- 1950 ' subroutine ... polar to rectangular ... MAG,ANG to X,Y
- 1960 X = MAG * COS(ANG)
- 1970 Y = MAG * SIN(ANG)
- 1980 RETURN
- 1990 '
- 2000 ' no comprehendo
- 2010 LOCATE 24,40
- 2020 PRINT "Syntax problem ... try again"
- 2030 GOTO 1370
-